/**
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.apache.geronimo.daytrader.javaee6.web.prims;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;

import org.apache.geronimo.daytrader.javaee6.utils.Log;

/**
 *
 * PingHTTPSession2 session create/destroy further extends the previous test by
 * invalidating the HTTP Session on every 5th user access. This results in testing
 * HTTPSession create and destroy
 *
 */
@WebServlet("/servlet/PingSession2")
public class PingSession2 extends HttpServlet {

    private static String initTime;
    private static int hitCount;

/**
 * forwards post requests to the doGet method
 * Creation date: (11/6/2000 10:52:39 AM)
 * @param res javax.servlet.http.HttpServletRequest
 * @param res2 javax.servlet.http.HttpServletResponse
 */
public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
    doGet(req, res);
}
/**
* this is the main method of the servlet that will service all get requests.
* @param request HttpServletRequest
* @param responce HttpServletResponce
**/
public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    HttpSession session = null;
    try
    {
        try
        {
            session = request.getSession(true);
        }
        catch (Exception e)
        {
            Log.error(e, "PingSession2.doGet(...): error getting session"); 
            //rethrow the exception for handling in one place.
            throw e;

        }

        // Get the session data value
        Integer ival = (Integer) session.getAttribute("sessiontest.counter");
        //if there is not a counter then create one.
        if (ival == null)
        {
            ival = new Integer(1);
        }
        else
        {
            ival = new Integer(ival.intValue() + 1);
        }
        session.setAttribute("sessiontest.counter", ival);
        //if the session count is equal to five invalidate the session
        if (ival.intValue() == 5)
        {
            session.invalidate();
        }

        try
        {
            // Output the page
            response.setContentType("text/html");
            response.setHeader("SessionTrackingTest-counter", ival.toString());

            PrintWriter out = response.getWriter();
            out.println(
                "<html><head><title>Session Tracking Test 2</title></head><body><HR><BR><FONT size=\"+2\" color=\"#000066\">HTTP Session Test 2: Session create/invalidate <BR></FONT><FONT size=\"+1\" color=\"#000066\">Init time: "
                    + initTime
                    + "</FONT><BR><BR>");
                        hitCount++;
            out.println(
                "<B>Hit Count: "
                    + hitCount
                    + "<BR>Session hits: "
                    + ival
                    + "</B></body></html>"); 
        }
        catch (Exception e)
        {
            Log.error(e, "PingSession2.doGet(...): error getting session information"); 
            //rethrow the exception for handling in one place.
            throw e;
        }

    }

    catch (Exception e)
    {
        //log the excecption
        Log.error(e, "PingSession2.doGet(...): error."); 
        //set the server responce to 500 and forward to the web app defined error page 
        response.sendError(
            500, 
            "PingSession2.doGet(...): error. " + e.toString()); 
    }
} //end of the method
/** 
 * returns a string of information about the servlet
 * @return info String: contains info about the servlet
 **/
public String getServletInfo()
{
    return "HTTP Session Key: Tests management of a read/write unique id";
}
/**
* called when the class is loaded to initialize the servlet
* @param config ServletConfig:
**/
public void init(ServletConfig config) throws ServletException {
    super.init(config);
    hitCount = 0;
    initTime = new java.util.Date().toString();

}
}